home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
- #ifndef nsIDrawingSurface_h___
- #define nsIDrawingSurface_h___
-
- #include "nscore.h"
- #include "nsISupports.h"
-
- // a memory area that can be rendered to
-
- typedef struct
- {
- PRUint32 mRedZeroMask; //red color mask in zero position
- PRUint32 mGreenZeroMask; //green color mask in zero position
- PRUint32 mBlueZeroMask; //blue color mask in zero position
- PRUint32 mAlphaZeroMask; //alpha data mask in zero position
- PRUint32 mRedMask; //red color mask
- PRUint32 mGreenMask; //green color mask
- PRUint32 mBlueMask; //blue color mask
- PRUint32 mAlphaMask; //alpha data mask
- PRUint8 mRedCount; //number of red color bits
- PRUint8 mGreenCount; //number of green color bits
- PRUint8 mBlueCount; //number of blue color bits
- PRUint8 mAlphaCount; //number of alpha data bits
- PRUint8 mRedShift; //number to shift value into red position
- PRUint8 mGreenShift; //number to shift value into green position
- PRUint8 mBlueShift; //number to shift value into blue position
- PRUint8 mAlphaShift; //number to shift value into alpha position
- } nsPixelFormat;
-
- #define RASWIDTH(width, bpp) ((((width) * (bpp) + 31) >> 5) << 2)
-
- #define NS_IDRAWING_SURFACE_IID \
- { 0x61cc77e0, 0xcaac, 0x11d2, \
- { 0xa8, 0x49, 0x00, 0x40, 0x95, 0x9a, 0x28, 0xc9 } }
-
- class nsIDrawingSurface : public nsISupports
- {
- public:
- NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDRAWING_SURFACE_IID)
- /**
- * Lock a rect of a drawing surface and return a
- * pointer to the upper left hand corner of the
- * bitmap.
- * @param aX x position of subrect of bitmap
- * @param aY y position of subrect of bitmap
- * @param aWidth width of subrect of bitmap
- * @param aHeight height of subrect of bitmap
- * @param aBits out parameter for upper left hand
- * corner of bitmap
- * @param aStride out parameter for number of bytes
- * to add to aBits to go from scanline to scanline
- * @param aWidthBytes out parameter for number of
- * bytes per line in aBits to process aWidth pixels
- * @return error status
- *
- **/
- NS_IMETHOD Lock(PRInt32 aX, PRInt32 aY, PRUint32 aWidth, PRUint32 aHeight,
- void **aBits, PRInt32 *aStride, PRInt32 *aWidthBytes,
- PRUint32 aFlags) = 0;
-
- /**
- * Unlock a rect of a drawing surface. must be preceded
- * by a call to Lock(). Lock()/Unlock() pairs do not nest.
- * @return error status
- *
- **/
- NS_IMETHOD Unlock(void) = 0;
-
- /**
- * Get the dimensions of a drawing surface
- * @param aWidth out parameter for width of drawing surface
- * @param aHeight out parameter for height of drawing surface
- * @return error status
- *
- **/
- NS_IMETHOD GetDimensions(PRUint32 *aWidth, PRUint32 *aHeight) = 0;
-
- /**
- * Get the offscreen status of the drawing surface
- * @param aOffscreen out parameter for offscreen status of
- * drawing surface. if PR_TRUE, then modifying the
- * drawing surface does not immediately reflect the
- * changes on the output device
- * @return error status
- *
- **/
- NS_IMETHOD IsOffscreen(PRBool *aOffScreen) = 0;
-
- /**
- * Get the pixel addressability status of the drawing surface
- * @param aAddressable out parameter for pixel addressability
- * status of drawing surface. if PR_TRUE, then the
- * drawing surface is optimized for pixel addressability
- * (i.e. the Lock() method has very low overhead). All
- * drawing surfaces support Lock()ing, but doing so on
- * drawing surfaces that do not return PR_TRUE here may
- * impose significant overhead.
- * @return error status
- *
- **/
- NS_IMETHOD IsPixelAddressable(PRBool *aAddressable) = 0;
-
- /**
- * Get the pixel format of a drawing surface
- * @param aOffscreen out parameter filled in with pixel
- * format information.
- * @return error status
- *
- **/
- NS_IMETHOD GetPixelFormat(nsPixelFormat *aFormat) = 0;
- };
-
- //when creating a drawing surface, you can use this
- //to tell the drawing surface that you anticipate
- //the need to get to the actual bits of the drawing
- //surface at some point during it's lifetime. typically
- //used when creating bitmaps to be operated on by the
- //nsIBlender implementations.
- #define NS_CREATEDRAWINGSURFACE_FOR_PIXEL_ACCESS 0x0001
-
- //flag to say that this drawing surface is shortlived,
- //which may affect how the OS allocates it. Used for
- //tiling, grouting etc.
- #define NS_CREATEDRAWINGSURFACE_SHORTLIVED 0x0002
-
- //when locking a drawing surface, use these flags to
- //control how the data in the surface should be accessed
- #define NS_LOCK_SURFACE_READ_ONLY 0x0001
- #define NS_LOCK_SURFACE_WRITE_ONLY 0x0002
-
- #endif // nsIDrawingSurface_h___
-